package cn.qiao.demo.demo;

import java.lang.reflect.Constructor;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;

public class InstantiatePunishPageListExample {
    public static void main(String[] args) {
        // 类的全限定名
        String className = "cn.qiao.demo.demo.PunishPageList";

        try {
            // 根据类名加载类
            Class<?> clazz = Class.forName(className);

            // 获取类的默认构造函数
            Constructor<?> constructor = clazz.getDeclaredConstructor();

            // 设置访问权限，以便访问非公共的构造函数
            constructor.setAccessible(true);

            // 使用默认构造函数创建实例
            Object instance = constructor.newInstance();

            // 在这里你可以使用 instance 对象了
            System.out.println("Successfully instantiated: " + instance.getClass().getName());

            // 获取泛型类型参数 T
            Type genericType = clazz.getGenericSuperclass();

            if (genericType instanceof ParameterizedType) {
                // 如果是参数化类型，获取实际的类型参数
                ParameterizedType parameterizedType = (ParameterizedType) genericType;
                Type[] typeArguments = parameterizedType.getActualTypeArguments();

                // 输出泛型参数
                for (Type typeArgument : typeArguments) {
                    System.out.println("Type Argument: " + typeArgument.getTypeName());
                }
            }

            // 对于 PunishPageList，typeArguments 应该包含 List<?>，你可以根据需要进一步处理

            // 获取并设置 paginator
            // 这里假设有一个 Paginator 类，你需要根据实际情况替换为实际的 Paginator 类
            Constructor<?> paginatorConstructor = Paginator.class.getDeclaredConstructor();
            paginatorConstructor.setAccessible(true);
            Object paginatorInstance = paginatorConstructor.newInstance();

            // 设置 paginator
            clazz.getMethod("setPaginator", Paginator.class).invoke(instance, paginatorInstance);

            // 获取 paginator
            Object retrievedPaginator = clazz.getMethod("getPaginator").invoke(instance);
            System.out.println("Retrieved Paginator: " + retrievedPaginator);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
